package com.iup.tp.twitup.ihm;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

/**
 * Classe de la vue principale de l'application.
 * 
 * @author S.Lucas
 */
public class TwitupMainView
{
  /**
   * Fenetre principale de l'application.
   */
  protected JFrame mFrame;

  /**
   * Composant qui affiche les Twits.
   */
  protected JPanel mTwitPanel;

  /**
   * Retourne la fenetre principale de l'application.
   */
  public JFrame getMainFrame()
  {
    return this.mFrame;
  }

  /**
   * Lance l'afficahge de l'IHM.
   */
  public void showGUI()
  {
    // Init auto de l'IHM au cas ou ;)
    if (mFrame == null)
    {
      this.initGUI();
    }

    // Affichage dans l'EDT
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        // Custom de l'affichage
        JFrame frame = TwitupMainView.this.mFrame;
        Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        frame.setLocation((screenSize.width - frame.getWidth()) / 2, (screenSize.height - frame.getHeight()) / 2);

        // Affichage
        TwitupMainView.this.mFrame.setVisible(true);

        // Refresh
        TwitupMainView.this.refreshIHM();
      }
    });
  }

  /**
   * Initialisation de l'IHM
   */
  protected void initGUI()
  {
    // Création de la fenetre principale
    mFrame = new JFrame("twItUP");
    mFrame.setLayout(new BorderLayout(10, 10));
    mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mFrame.setBackground(Color.lightGray);
    mFrame.setIconImage(TwitupIcon.LOGO_IUP_ICON_50.getImage());

    // Création de la partie pour les twits
    mTwitPanel = this.createTwitPanel();
    JScrollPane scrollPane = new JScrollPane();
    scrollPane.getViewport().add(mTwitPanel);
    mFrame.add(scrollPane, BorderLayout.CENTER);

    // Ajout des menus à l'IHM
    this.addMenu();
  }

  /**
   * Cosntruction du panel pour l'afficahge des twits.
   */
  protected JPanel createTwitPanel()
  {
    // TODO
    return new JPanel();
  }

  /**
   * Ajout desm enus à la fenetre principale.
   */
  protected void addMenu()
  {
    JMenuBar menubar = new JMenuBar();

    JMenu file = new JMenu("Fichier");

    JMenuItem exitMenuItem = new JMenuItem("Quitter");
    exitMenuItem.setToolTipText("Quitter l'application");
    exitMenuItem.setIcon(TwitupIcon.EXIT_ICON_20);
    exitMenuItem.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent event)
      {
        System.exit(0);
      }
    });

    file.add(exitMenuItem);
    menubar.add(file);

    JMenu credits = new JMenu("?");

    JMenuItem creditMenuItem = new JMenuItem("A propos");
    creditMenuItem.setIcon(TwitupIcon.LOGO_IUP_ICON_20);
    creditMenuItem.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent event)
      {
        TwitupMainView.this.showAboutDialog();
      }
    });
    credits.add(creditMenuItem);

    menubar.add(file);
    menubar.add(credits);

    this.mFrame.setJMenuBar(menubar);
  }

  /**
   * Afficahge des crédits de l'application.
   */
  protected void showAboutDialog()
  {
    JOptionPane.showMessageDialog(this.mFrame, "         UBO M2-TIIL 2015 \n Département Informatique", "A propos",
                                  JOptionPane.INFORMATION_MESSAGE, TwitupIcon.LOGO_IUP_ICON_50);
  }

  /**
   * Refresh et repack de l'IHM.
   */
  public void refreshIHM()
  {
    this.mTwitPanel.repaint();
    this.mFrame.pack();
    this.mFrame.repaint();
  }
}
